﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Contratos;
using Model.Requisicoes;
using System.Globalization;
using Model.Refeicoes;
using Services.Refeicoes;

namespace welwitschia.Requisicoes
{
    public partial class RequisicaoEscolha : PaginaBase
    {
        private IList<Contrato> _contratos;


        protected void Page_Init(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
            }
        }
        
        
        protected void Page_Load(object sender, EventArgs e)
        {
            IContratoService contratoService = contratoService = new ContratoService();

            if (!Page.IsPostBack)
            {
                hfData.Value = DateTime.Today.ToString("d");
                txtDataEncomenda.Text = hfData.Value;
                
                _contratos = contratoService.ObterComRefeicoesAbertasAte(Convert.ToDateTime(hfData.Value).AddDays(-1));

                if (_contratos.Count > 0)
                    MostraAviso("Não pode fazer novas encomendas. Existem requisições para as quais é necessário indicar o número de refeições vendidas.");

                lvContratos.DataSource = contratoService.ObterTodosActivosPorData(DateTime.Today);
                lvContratos.DataBind();
            }
            else
            {
                _contratos = contratoService.ObterComRefeicoesAbertasAte(Convert.ToDateTime(hfData.Value).AddDays(-1));
            }
        }


        protected void lvContratos_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
        }

        protected void lvContratos_ItemEditing(object sender, ListViewEditEventArgs e)
        {
        }

        protected void lvContratos_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Edit")
            {
                if (_contratos.Count > 0)
                {
                    Int64 unidadeId = Convert.ToInt64(e.CommandArgument);
                    Contrato c = _contratos.First(s => s.Unidade.IdUnidade == unidadeId);
                    if (c != null)
                    {
                        Response.Redirect("~\\ServicoRefeicoes\\RefeicoesAbertasContratos.aspx");
                    }
                }

                Response.Redirect(String.Format("~\\Requisicoes\\RequisicaoDetalhe.aspx?uid={0}&dt={1}",
                    e.CommandArgument.ToString(), Convert.ToDateTime(txtDataEncomenda.Text).ToString("yyyyMMdd")));
            }
        }


        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            try
            {
                hfData.Value = txtDataEncomenda.Text;
                DateTime data = DateTime.ParseExact(hfData.Value, "d", CultureInfo.CurrentCulture);
                IContratoService contratoService = new ContratoService();

                _contratos = contratoService.ObterComRefeicoesAbertasAte(Convert.ToDateTime(hfData.Value).AddDays(-1));
                if (_contratos.Count > 0)
                    MostraAviso("Não pode fazer novas encomendas. Existem requisições para as quais é necessário indicar o número de refeições vendidas.");
                
                lvContratos.DataSource = contratoService.ObterTodosActivosPorData(DateTime.Today);
                lvContratos.DataBind();

            
            }
            catch (Exception ex)
            {
                MostraErro(ex.Message);
            }
        }

        protected String GetText(Int64 numeroContrato)
        {
            if (_contratos.Count > 0)
            {
                Contrato c = _contratos.First(s => s.NumeroContrato == numeroContrato);
                if (c != null)
                    return "Registar Vendas Anteriores";
                else
                    return String.Empty;        
            }

            IList<Refeicao> refeicoes =  
                RefeicaoService.ObterRefeicaoPorContratoDataRefeicao(numeroContrato, Convert.ToDateTime(hfData.Value));

            if (refeicoes.Count == 0)
                return "Abrir Encomenda";

            return "Continuar Encomenda";
        }
    }
}